def demo():
    """ 这是一个测试函数"""
    print("this is a  demo")

#dir  可以查看函数或者属性的所有方法
print(dir(demo))
print(demo.__doc__)

class Person:
    #  __ 在属性或者方法之前添加两个下划线
    #  变成私有的属性或者方法 在外界不能直接调用访问
    #若要强制访问，使用  对象._类名和属性或方法的拼接
    #如 p._Person__scret  即可调用
    __scret=""
    Name=None
    weight=60
    age=10
    __character="共同的特诊"
    def getName(self):
        return self.Name
    def work(self):
        print("我的工作是 for alive")
    def getAge(self):
        return self.age
    #init 方法类似于构造器 内置方法
    def __init__(self,name=""):
        print("this is a init function")
        self.Name=name
        self.age=18
    def __del__(self):
        """在销毁之前在做一些事情，销毁是自动调用"""
        print("%s即将销毁"%self.Name)
    def __str__(self):
        """相当于java的 tostring方法，打印对象信息
         但必须要返回一个字符串 """
        print("我是 %s"%(self.Name))
    def run(self):
        self.weight-=1
        print("跑步可以减肥")
    def getCharacter(self):
        print("Person's character is :",self.__character)
        return self.__character
    #方法重写  直接重写方法就可以
    # 1若需要使用父类的方法 则使用super调用相应方法即可
    #
class BPerson(Person):
    def __init__(self):
        self.Name=''
        self.__charcter='b de techeng'
    def getCharacter(self):
        print("Bperson's charater is :",self.__charcter)
        print("父类的私有属性方法需要使用super", super(BPerson, self).getCharacter())

class HouseItem:
    def __init__(self,name,area):
        self.name=name
        self.area=area
    def __str__(self):
        return "[%s] 占地 %.2f"%(self.name,self.area)
class House:
    def __init__(self,house_type,area):
        self.house_type=house_type
        self.area=area
        #剩余面积
        self.free_area=area
        self.item_list=[]

    def __str__(self):
        return" 户型：%s\n 总面积:%s"

    def add_item(self,item):
        print("要添加%s"%item)
        self.item_list.append(item)

#########多态
class Worker(Person):
    def work(self):
        print("my job is work")

class Designer(Person):
    def work(self):
        print("my job is designer")


xm=Person()
age=xm.getAge()
print(age)
xm.Name="xoao"
print(xm.getName())
xm.__str__()
print("-----------------")
mango=Person("小明")
mango.run()
print(mango.weight)

bp=BPerson()
bp.getCharacter()

#-----------对象.mro()   mro => method resolutino order 判断多继承时 判断方法 属性的调用路径
w=Worker()
d=Designer()
w.work()
d.work()